iT邦幫忙

2022 iThome 鐵人賽

DAY 17
0

今天要來介紹Scala的特徵(traits)

在Scala裡,多重繼承是不被允許的,所以要實現多重繼承的概念時就可以用特徵(trait),因為它可以被繼承多個。
特徵就類似Java的介面(interface),不過它的功能更為強大

  1. trait可以定義抽象屬性和抽象方法
  2. trait可以定義具體屬性和具體方法

用法是使用關鍵字trait,子類別在繼承時使用extends如果要繼承多個特徵時就用逗號(commas)隔開。

trait hasFourLeg:
    def run(): Unit

trait hasTeeth:
    def bite(): Unit

class Dog extends hasFourLeg, hasTeeth:
    def run(): Unit = println("run!")
    def bite(): Unit = println("bite!!")

如果要繼承多個特徵時就用逗號(commas)隔開。
接著我們來看特徵定義抽象方法

trait Pet:
    def speak() = println("bark!")
    def hasFur(): Unit     //abstract method

class goldenRetriever extends Pet:
    def hasFur() = println("I have golden fur!!")

class whiteCat extends Pet:
    override def speak() = println("meow~")
    def hasFur() = println("I have white fur.")

另外,當一個類別extends一個特徵卻沒有實作它的抽象方法時,這個類別必須被宣告為抽象類別。

abstract class bird extends Pet:
    def fly(): Unit = println("fly!")

儘管Scala有提供抽象類別,一般還是比較常用特徵。
因為一個子類別只能extends一個抽象類別,但卻可以實作很多特徵,所以使用特徵還是比較有彈性。

/images/emoticon/emoticon82.gif


上一篇
[Day 16]Scala繼承與組合 Part2
下一篇
[Day 18]Scala Traits Part2
系列文
連續30天 初學者介紹Scala語言30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言